package net.yc.imalachat.push.frags.user;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.util.Log;

import androidx.annotation.Nullable;

import com.bumptech.glide.Glide;
import com.example.common.app.Application;
import com.example.common.app.Fragment;
import com.example.common.widget.PotraitView;
import com.example.factory.Factory;
import com.example.factory.net.UploadHelper;
import com.yalantis.ucrop.UCrop;

import net.yc.imalachat.push.R;
import net.yc.imalachat.push.media.GalleryFragment;

import java.io.File;

import butterknife.BindView;
import butterknife.OnClick;

import static android.app.Activity.RESULT_OK;

/**
 * 更新信息的界面
 */
public class UpdateInfoFragment extends Fragment {
    private static final String TAG = "UpdateInfoFragment";

    @BindView(R.id.im_portrait)
    PotraitView mPortrait;

    public UpdateInfoFragment() {
    }

    @Override
    protected int getContentLayoutId() {
        return R.layout.fragment_update_info;
    }

    @OnClick(R.id.im_portrait)
    void onPortraitClick() {
        new GalleryFragment()
                .setListener(new GalleryFragment.OnSelectedListener() {
                    @Override
                    public void onSelectedImage(String path) {
                        UCrop.Options option = new UCrop.Options();
                        // 设置图片处理的格式JPEG
                        option.setCompressionFormat(Bitmap.CompressFormat.JPEG);
                        // 设置图片压缩之后的精度
                        option.setCompressionQuality(96);

                        // 图片缓存的地址
                        File dPath = Application.getPortraitTmpFile();

                        // 发起剪切
                        UCrop.of(Uri.fromFile(new File(path)), Uri.fromFile(dPath))
                            .withAspectRatio(1, 1)  // 1:1 比例
                            .withMaxResultSize(520, 520)    // 返回最大的尺寸
                            .withOptions(option)     // 相关参数
                            .start(getActivity());  // 这个activity的回调是回调到了下面的那个onActivityResult()
                    }
                }) // show 的时候建议使用getChildFragmentManager
                    // tag GalleryFragment class 名
                .show(getChildFragmentManager(), GalleryFragment.class.getName());
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
        // 收到从Activity传递过来的回调，然后取出其中的值进行图片的加载
        // 如果是我能处理的类型
        if (resultCode == RESULT_OK && requestCode == UCrop.REQUEST_CROP) {
            final Uri resultUri = UCrop.getOutput(data);
            if (resultUri != null) {
                // 渲染到界面
                loadPortraitImage(resultUri);
            }
        } else if (resultCode == UCrop.RESULT_ERROR) {
            final Throwable cropError = UCrop.getError(data);
        }
    }

    /**
     * 加载图片到头像中
     * @param uri
     */
    private void loadPortraitImage(Uri uri) {
        Glide.with(this)
                .load(uri)
                .asBitmap()
                .centerCrop()
                .into(mPortrait);

        // 拿到本地文件的地址
        final String localPath = uri.getPath();
        Log.e(TAG, "loadPortraitImageLocalPath: " + localPath);

        Factory.runOnAsync(new Runnable() {
            @Override
            public void run() {
                // localPath：这是在主线程中的变量，要放在子线程中执行的话，需要改成final，才可以跨方法使用
                String url = UploadHelper.uploadPortrait(localPath);
                Log.i(TAG, "run: " + url);
            }
        });
    }
}